home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 July: Mac OS SDK / Dev.CD Jul 96 SDK / Dev.CD Jul 96 SDK1.toast / Development Kits (Disc 1) / OpenDoc / OpenDoc Development / Debugging Support / OpenDoc Source Code / Storage / LinkSpcB.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-04-22  |  6.2 KB  |  200 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        LinkSpecB.cpp
  3.  
  4.     Contains:    Implementation for ODBaseLinkSpec class.
  5.  
  6.     Owned by:    Craig Carper
  7.  
  8.     Copyright:    © 1993 - 1995 by Apple Computer, Inc., all rights reserved.
  9.  
  10.     Change History (most recent first):
  11.  
  12.          <6>      8/3/95    RR        #1257260: Collapse B classes. Remove
  13.                                     somInit methods. Don't call IsInitialized
  14.                                     or SubclassResponsibility
  15.          <5>     5/26/95    VL        1251403: Multithreading naming support.
  16.          <4>     3/10/95    CC        1225926: Added FromThisDraft().
  17.          <3>    12/20/94    VL        1195012: Make Storage calls be
  18.                                     marshallable.
  19.          <2>    12/15/94    CC        1205709 LinkSpcB.cpp - Added implementation
  20.                                     of AcquirePart(), GetPartData(),
  21.                                     ReadLinkSpec(), WriteLinkSpec() methods.
  22.          <1>     6/24/94    CC        first checked in
  23.     To Do:
  24. */
  25.  
  26. #define VARIABLE_MACROS
  27.  
  28. #define ODBaseLinkSpec_Class_Source
  29. #include <LinkSpcB.xih>
  30.  
  31. #ifndef SOM_ODStorageUnit_xh
  32. #include "StorageU.xh"
  33. #endif
  34.  
  35. #ifndef _BARRAY_
  36. #include <BArray.h>
  37. #endif
  38.  
  39. #ifndef _STORUTIL_
  40. #include <StorUtil.h>
  41. #endif
  42.  
  43. #pragma segment ODBaseLinkSpec
  44.  
  45. //==============================================================================
  46. // ODBaseLinkSpec
  47. //==============================================================================
  48.  
  49. //------------------------------------------------------------------------------
  50. // ODBaseLinkSpec: somInit
  51. //------------------------------------------------------------------------------
  52.  
  53. SOM_Scope void  SOMLINK ODBaseLinkSpecsomInit(ODBaseLinkSpec *somSelf)
  54. {
  55.     ODBaseLinkSpecData *somThis = ODBaseLinkSpecGetData(somSelf);
  56.     ODBaseLinkSpecMethodDebug("ODBaseLinkSpec","somInit");
  57.  
  58.     parent_somInit(somSelf);
  59.  
  60.     _fPart = kODNULL;
  61.     _fPartData = CreateEmptyByteArrayStruct(0);
  62. }
  63.  
  64. //------------------------------------------------------------------------------
  65. // ODBaseLinkSpec: somUninit
  66. //------------------------------------------------------------------------------
  67.  
  68. SOM_Scope void  SOMLINK ODBaseLinkSpecsomUninit(ODBaseLinkSpec *somSelf)
  69. {
  70.     ODBaseLinkSpecData *somThis = ODBaseLinkSpecGetData(somSelf);
  71.     ODBaseLinkSpecMethodDebug("ODBaseLinkSpec","somUninit");
  72.  
  73.     DisposeByteArrayStruct(_fPartData);
  74.  
  75.     parent_somUninit(somSelf);
  76. }
  77.  
  78. //------------------------------------------------------------------------------
  79. // ODBaseLinkSpec: InitBaseLinkSpec
  80. //------------------------------------------------------------------------------
  81.  
  82. SOM_Scope void  SOMLINK ODBaseLinkSpecInitBaseLinkSpec(ODBaseLinkSpec *somSelf, Environment *ev,
  83.         ODPart* part,
  84.         ODByteArray* partData)
  85. {
  86.     ODBaseLinkSpecData *somThis = ODBaseLinkSpecGetData(somSelf);
  87.     ODBaseLinkSpecMethodDebug("ODBaseLinkSpec","InitBaseLinkSpec");
  88.  
  89.     SOM_CATCH return;
  90.  
  91.     if ( partData )
  92.     {
  93.         DisposeByteArrayStruct(_fPartData);
  94.         _fPartData = CopyByteArrayStruct(partData);
  95.     }
  96.  
  97.     _fPart = part;
  98. }
  99.  
  100. //------------------------------------------------------------------------------
  101. // ODBaseLinkSpec::GetPart
  102. //------------------------------------------------------------------------------
  103.  
  104. SOM_Scope ODPart*  SOMLINK ODBaseLinkSpecGetPart(ODBaseLinkSpec *somSelf, Environment *ev)
  105. {
  106.     ODBaseLinkSpecData *somThis = ODBaseLinkSpecGetData(somSelf);
  107.     ODBaseLinkSpecMethodDebug("ODBaseLinkSpec","GetPart");
  108.  
  109.     return _fPart;
  110. }
  111.  
  112. //------------------------------------------------------------------------------
  113. // ODBaseLinkSpec::GetPartData
  114. //------------------------------------------------------------------------------
  115.  
  116. SOM_Scope ODByteArray  SOMLINK ODBaseLinkSpecGetPartData(ODBaseLinkSpec *somSelf, Environment *ev)
  117. {
  118.     ODBaseLinkSpecData *somThis = ODBaseLinkSpecGetData(somSelf);
  119.     ODBaseLinkSpecMethodDebug("ODBaseLinkSpec","GetPartData");
  120.  
  121.     SOM_CATCH return CreateEmptyByteArrayStruct(0);
  122.     
  123.     return CopyByteArrayStruct(&_fPartData);
  124. }
  125.  
  126. //------------------------------------------------------------------------------
  127. // ODBaseLinkSpec: WriteLinkSpec
  128. //------------------------------------------------------------------------------
  129.  
  130. SOM_Scope void  SOMLINK ODBaseLinkSpecWriteLinkSpec(ODBaseLinkSpec *somSelf, Environment *ev,
  131.         ODStorageUnit* su)
  132. {
  133.     ODBaseLinkSpecData *somThis = ODBaseLinkSpecGetData(somSelf);
  134.     ODBaseLinkSpecMethodDebug("ODBaseLinkSpec","WriteLinkSpec");
  135.  
  136.     SOM_CATCH return;
  137.     
  138.     // Assumes su has been focused to a property and link spec value
  139.  
  140.     StorageUnitSetValue(su, ev, sizeof(ODPart*), (ODValue) &_fPart);
  141.     StorageUnitSetValue(su, ev, sizeof(ODULong), (ODValue) &_fPartData._length);
  142.     StorageUnitSetValue(su, ev, _fPartData._length, (ODValue) _fPartData._buffer);
  143. }
  144.  
  145. //------------------------------------------------------------------------------
  146. // ODBaseLinkSpec: ReadLinkSpec
  147. //------------------------------------------------------------------------------
  148.  
  149. SOM_Scope void  SOMLINK ODBaseLinkSpecReadLinkSpec(ODBaseLinkSpec *somSelf, Environment *ev,
  150.         ODStorageUnit* su)
  151. {
  152.     ODBaseLinkSpecData *somThis = ODBaseLinkSpecGetData(somSelf);
  153.     ODBaseLinkSpecMethodDebug("ODBaseLinkSpec","ReadLinkSpec");
  154.  
  155.     SOM_CATCH return;
  156.  
  157.     ODPart*            part;
  158.     ODByteArray        partData;
  159.     ODULong            dataSize;
  160.     ODULong            valueSize;
  161.  
  162.     // Assumes su has been focused to a property and link spec value,
  163.     // and the current offset is where the base link spec was written.
  164.  
  165.     valueSize = StorageUnitGetValue(su, ev, sizeof(ODPart*), (ODValue) &part);
  166.     if ( valueSize != sizeof(ODPart*) )
  167.         THROW(kODErrCorruptLinkSpecValue);
  168.  
  169.     valueSize = StorageUnitGetValue(su, ev, sizeof(ODULong), (ODValue) &dataSize); 
  170.     if ( valueSize != sizeof(ODULong) )
  171.         THROW(kODErrCorruptLinkSpecValue);
  172.  
  173.     partData = CreateEmptyByteArrayStruct(dataSize);
  174.     if ( dataSize > 0 )
  175.     {
  176.         valueSize = StorageUnitGetValue(su, ev, dataSize, (ODValue) partData._buffer);
  177.         if ( valueSize != dataSize )
  178.         {
  179.             DisposeByteArrayStruct(partData);
  180.             THROW(kODErrCorruptLinkSpecValue);
  181.         }
  182.     }
  183.     partData._length = dataSize;
  184.     
  185.     _fPart = part;
  186.     DisposeByteArrayStruct(_fPartData);
  187.     _fPartData = partData;
  188. }
  189.  
  190. //------------------------------------------------------------------------------
  191. // ODBaseLinkSpec::FromThisDraft
  192. //------------------------------------------------------------------------------
  193.  
  194. SOM_Scope ODBoolean  SOMLINK ODBaseLinkSpecFromThisDraft(ODBaseLinkSpec *somSelf, Environment *ev)
  195. {
  196.     // ODBaseLinkSpecData *somThis = ODBaseLinkSpecGetData(somSelf);
  197.     ODBaseLinkSpecMethodDebug("ODBaseLinkSpec","FromThisDraft");
  198.  
  199.     return kODTrue;
  200. }